home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / assembler / progasm1.lha / SORGENTI2 / LEZIONE5l.s < prev    next >
Text File  |  1994-07-07  |  5KB  |  172 lines

  1.  
  2. ; Lezione5l.s    Effetto "ALLUNGAMENTO" fatto alternando moduli normali e -40
  3.  
  4.     SECTION    CiriCop,CODE
  5.  
  6. Inizio:
  7.     move.l    4.w,a6        ; Execbase in a6
  8.     jsr    -$78(a6)    ; Disable - ferma il multitasking
  9.     lea    GfxName(PC),a1    ; Indirizzo del nome della lib da aprire in a1
  10.     jsr    -$198(a6)    ; OpenLibrary
  11.     move.l    d0,GfxBase    ; salvo l'indirizzo base GFX in GfxBase
  12.     move.l    d0,a6
  13.     move.l    $26(a6),OldCop    ; salviamo l'indirizzo della copperlist vecchia
  14.  
  15. ;    Puntiamo i bitplanes in copperlist
  16.  
  17.     MOVE.L    #PIC,d0        ; in d0 mettiamo l'indirizzo della PIC,
  18.     LEA    BPLPOINTERS,A1    ; puntatori nella COPPERLIST
  19.     MOVEQ    #2,D1        ; numero di bitplanes -1 (qua sono 3)
  20. POINTBP:
  21.     move.w    d0,6(a1)    ; copia la word BASSA dell'indirizzo del plane
  22.     swap    d0        ; scambia le 2 word di d0 (es: 1234 > 3412)
  23.     move.w    d0,2(a1)    ; copia la word ALTA dell'indirizzo del plane
  24.     swap    d0        ; scambia le 2 word di d0 (es: 3412 > 1234)
  25.     ADD.L    #40*256,d0    ; + lunghezza bitplane -> prossimo bitplane
  26.     addq.w    #8,a1        ; andiamo ai prossimi bplpointers nella COP
  27.     dbra    d1,POINTBP    ; Rifai D1 volte POINTBP (D1=num of bitplanes)
  28.  
  29.     move.l    #COPPERLIST,$dff080    ; Puntiamo la nostra COP
  30.     move.w    d0,$dff088        ; Facciamo partire la COP
  31.  
  32.     move.w    #0,$dff1fc        ; Disattiva l'AGA
  33.     move.w    #$c00,$dff106        ; Disattiva l'AGA
  34.  
  35. mouse:
  36.     btst    #6,$bfe001    ; tasto sinistro del mouse premuto?
  37.     bne.s    mouse        ; se no, torna a mouse:
  38.  
  39.     move.l    OldCop(PC),$dff080    ; Puntiamo la cop di sistema
  40.     move.w    d0,$dff088        ; facciamo partire la vecchia cop
  41.  
  42.     move.l    4.w,a6
  43.     jsr    -$7e(a6)    ; Enable - riabilita il Multitasking
  44.     move.l    gfxbase(PC),a1    ; Base della libreria da chiudere
  45.     jsr    -$19e(a6)    ; Closelibrary - chiudo la graphics lib
  46.     rts            ; USCITA DAL PROGRAMMA
  47.  
  48. ;    Dati
  49.  
  50. GfxName:
  51.     dc.b    "graphics.library",0,0    
  52.  
  53. GfxBase:        ; Qua ci va l'indirizzo di base per gli Offset
  54.     dc.l    0    ; della graphics.library
  55.  
  56. OldCop:            ; Qua ci va l'indirizzo della vecchia COP di sistema
  57.     dc.l    0
  58.  
  59.     SECTION    GRAPHIC,DATA_C
  60.  
  61. COPPERLIST:
  62.     dc.w    $120,$0000,$122,$0000,$124,$0000,$126,$0000,$128,$0000 ; SPRITE
  63.     dc.w    $12a,$0000,$12c,$0000,$12e,$0000,$130,$0000,$132,$0000
  64.     dc.w    $134,$0000,$136,$0000,$138,$0000,$13a,$0000,$13c,$0000
  65.     dc.w    $13e,$0000
  66.  
  67.     dc.w    $8e,$2c81    ; DiwStrt    (registri con valori normali)
  68.     dc.w    $90,$2cc1    ; DiwStop
  69.     dc.w    $92,$0038    ; DdfStart
  70.     dc.w    $94,$00d0    ; DdfStop
  71.     dc.w    $102,0        ; BplCon1
  72.     dc.w    $104,0        ; BplCon2
  73.     dc.w    $108,0        ; Bpl1Mod
  74.     dc.w    $10a,0        ; Bpl2Mod
  75.  
  76.             ; 5432109876543210
  77.     dc.w    $100,%0011001000000000    ; bits 13 e 12 accesi!! (3 = %011)
  78.  
  79. BPLPOINTERS:
  80.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane
  81.     dc.w $e4,$0000,$e6,$0000    ;secondo bitplane
  82.     dc.w $e8,$0000,$ea,$0000    ;terzo     bitplane
  83.  
  84.     dc.w    $0180,$000    ; color0
  85.     dc.w    $0182,$475    ; color1
  86.     dc.w    $0184,$fff    ; color2
  87.     dc.w    $0186,$ccc    ; color3
  88.     dc.w    $0188,$999    ; color4
  89.     dc.w    $018a,$232    ; color5
  90.     dc.w    $018c,$777    ; color6
  91.     dc.w    $018e,$444    ; color7
  92.  
  93. ; COPPERLIST CHE "ALLUNGA"
  94.  
  95.     dc.l    $8907fffe        ; wait linea $89
  96.     dc.w    $108,-40,$10a,-40    ; modulo -40, ripetizione ultima linea
  97.     dc.l    $9007fffe        ; aspetto 7 linee -saranno tutte uguali
  98.     dc.w    $108,0,$10a,0        ; poi faccio avanzare di una linea
  99.     dc.l    $9107fffe        ; e la linea seguente...
  100.     dc.w    $108,-40,$10a,-40    ; rimetto il modulo a FLOOD
  101.     dc.l    $9807fffe        ; aspetto 7 linee -saranno tutte uguali
  102.     dc.w    $108,0,$10a,0        ; faccio avanzare alla linea dopo
  103.     dc.l    $9907fffe        ; poi...
  104.     dc.w    $108,-40,$10a,-40    ; mi ripeto la linea per 7 linee col
  105.     dc.l    $a007fffe        ; modulo a -40
  106.     dc.w    $108,0,$10a,0        ; avanzo di una linea... ECCETERA.
  107.     dc.l    $a107fffe
  108.     dc.w    $108,-40,$10a,-40
  109.     dc.l    $a807fffe
  110.     dc.w    $108,0,$10a,0
  111.     dc.l    $a907fffe
  112.     dc.w    $108,-40,$10a,-40
  113.     dc.l    $b007fffe
  114.     dc.w    $108,0,$10a,0
  115.     dc.l    $b107fffe
  116.     dc.w    $108,-40,$10a,-40
  117.     dc.l    $b807fffe
  118.     dc.w    $108,0,$10a,0
  119.     dc.l    $b907fffe
  120.     dc.w    $108,-40,$10a,-40
  121.     dc.l    $c007fffe
  122.     dc.w    $108,0,$10a,0
  123.     dc.l    $c107fffe
  124.     dc.w    $108,-40,$10a,-40
  125.     dc.l    $c807fffe
  126.     dc.w    $108,0,$10a,0
  127.     dc.l    $c907fffe
  128.     dc.w    $108,-40,$10a,-40
  129.     dc.l    $d007fffe
  130.     dc.w    $108,0,$10a,0
  131.     dc.l    $d107fffe
  132.     dc.w    $108,-40,$10a,-40
  133.     dc.l    $d807fffe
  134.     dc.w    $108,0,$10a,0
  135.     dc.l    $d907fffe
  136.     dc.w    $108,-40,$10a,-40
  137.     dc.l    $e007fffe
  138.     dc.w    $108,0,$10a,0
  139.     dc.l    $e107fffe
  140.     dc.w    $108,-40,$10a,-40
  141.     dc.l    $e807fffe
  142.     dc.w    $108,0,$10a,0
  143.     dc.l    $e907fffe
  144.     dc.w    $108,-40,$10a,-40
  145.     dc.l    $f007fffe
  146.     dc.w    $108,0,$10a,0    ; ritorno alla normalita'
  147.  
  148.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  149.  
  150. PIC:
  151.     incbin    "amiga.320*256*3"    ; qua carichiamo la figura in RAW,
  152.                     ; convertita col KEFCON, fatta di
  153.                     ; 3 bitplanes consecutivi
  154.  
  155.     end
  156.  
  157. Questo e' uno degli altri utilizzi dell'effetto "FLOOD" fatto con i moduli,
  158. infatti e' piuttosto facile "allungare" una figura o simulare dei pixel piu'
  159. lunghi del normale alternando dei moduli -40, che allungano, a dei moduli
  160. normalmente a zero, che fanno scattare la linea seguente, la quale sara' poi
  161. allungata facendola seguire da un altro modulo -40 mantenuto per qualche linea.
  162. In questo esempio l'allungamento e' un *8, infatti la linea viene fatta
  163. avanzare solo una volta ogni 8 pixel, infatti i moduli -40 vengono distanziati
  164. con i wait di 7 linee, e tra questi allungamenti sono poste delle linee a
  165. modulo normale, che dunque fanno scattare alla linea successiva terminata la
  166. visualizzazione, ma la linea seguente c'e' subito un'altro modulo negativo
  167. che fa ripetere la nuova linea per 7 righe, piu' quella con modulo normale che
  168. fa scattare nuovamente la linea nuova quando va "a capo".
  169. Cambiando la distanza tra i wait si possono creare interessanti effetti di
  170. ondulazione in stile "zoom".
  171.  
  172.